package vn.nichecafe.client.ui.slider.data;

import java.util.ArrayList;
import java.util.List;

import vn.nichecafe.client.ui.slider.content.ContentEnum;
import vn.nichecafe.client.ui.slider.content.MenuPopupContent;
import vn.nichecafe.client.ui.slider.widget.ListItems;
import vn.nichecafe.client.ui.slider.widget.UnorderedList;

import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.SimplePanel;

import static com.google.gwt.query.client.GQuery.$;
import static com.google.gwt.query.client.GQuery.Effects;

public class MenuData {
	public static int MENU_IMAGE_WIDTH = 413;
	public static int MENU_IMAGE_HEIGHT = 258;

	private List<NMenu> nMenus;
	
	public MenuData(){
		initData();
	}
	
	private void initData(){
		nMenus = new ArrayList<NMenu>();
		List<String> ingredients =  new ArrayList<String>();
		ingredients.add("Cafe culi robusta");
		ingredients.add("Sữa tươi");
		ingredients.add("Whipping cream");
		ingredients.add("Chocolate");
		NMenu menu = new NMenu(1, new Image("/images/menu/cafe/coffe-ice-blended.jpg"),"Coffee ice blended","Cà phê đá xay", ingredients, "Cafe đá xay ngon, nhiều hương vị hòa quyện. Đây là món nước đặc trưng của NICHE cafe, mời các bạn cùng thưởng thức.", "32.000đ",ContentEnum.COFFEE);
		nMenus.add(menu);
		menu = new NMenu(2, new Image("/images/menu/cafe/coffe-chocolate-ice-blended.jpg"),"Coffee chocolate ice blended","Cà phê sôcôla đá xay", ingredients, "Cafe đá xay ngon, nhiều hương vị hòa quyện. Đây là món nước đặc trưng của NICHE cafe, mời các bạn cùng thưởng thức.", "32.000đ",ContentEnum.COFFEE);
		nMenus.add(menu);
		menu = new NMenu(3, new Image("/images/menu/cafe/coffe-vani-ice-blended.jpg"),"Coffee vani ice blended","Cà phê đá xay - hương vani", ingredients, "Cafe đá xay ngon", "32.000đ",ContentEnum.COFFEE);
		nMenus.add(menu);
		menu = new NMenu(4, new Image("/images/menu/cafe/coffe-ice-blended.jpg"),"Coffee caramel ice blended","Cà phê đá xay - hương caramel",  ingredients, "Cafe đá xay ngon, nhiều hương vị hòa quyện. Đây là món nước đặc trưng của NICHE cafe, mời các bạn cùng thưởng thức.", "32.000đ",ContentEnum.COFFEE);
		nMenus.add(menu);
		menu = new NMenu(5, new Image("/images/menu/cafe/coffe-ice-blended.jpg"),"Coffee baileys ice blended", "Cà phê đá xay - Bailey", ingredients, "Cafe đá xay ngon", "32.000đ",ContentEnum.COFFEE);
	}

	private List<NMenu> getnMenus(ContentEnum contentType) {
		List<NMenu> menus = null;
		if(nMenus != null){
			menus = new ArrayList<NMenu>();
			for (NMenu nmu : nMenus) {
				if(contentType.equals(nmu.getType())){
					menus.add(nmu);
				}
			}
		}
		return menus;
	}
	
	private List<String> getListNames(ContentEnum contentType){
		List<String> menuNames = null;
		if(nMenus != null){
			menuNames = new ArrayList<String>();
			for (NMenu nmu : nMenus) {
				if(contentType.equals(nmu.getType())){
					menuNames.add(nmu.getNameVI());
				}
			}
		}
		return menuNames;
	}
	
	
	public List<ListItems> getListItems(ContentEnum contentType){
		if(nMenus != null){
			List<ListItems> listItems = new ArrayList<ListItems>(nMenus.size());
			List<NMenu> menus = getnMenus(contentType);
			for (NMenu nMenu : menus) {
				ListItems item = new ListItems();
				SimplePanel simplePanel = new SimplePanel();
				simplePanel.setStyleName("imgBorder");
				
				Image image = nMenu.getMenuImage();
				image.setPixelSize(MENU_IMAGE_WIDTH, MENU_IMAGE_HEIGHT);
				simplePanel.add(image);
				item.add(simplePanel);
				
				HTML title = new HTML("<h1>" + nMenu.getName() + "</h1>");
				title.setStyleName("title");
				item.add(title);
				
				HTML titleVi = new HTML("<h2>" + nMenu.getNameVI() + "</h2>");
				titleVi.setStyleName("title-vi");
				item.add(titleVi);
			
				SimplePanel ingredients = new SimplePanel();
				ingredients.setStyleName("ingredients");
				UnorderedList unorderedList = new UnorderedList();
				ingredients.add(unorderedList);
				for (String ingredient : nMenu.getIngredients()) {
					ListItems ingredientItem = new ListItems();
					ingredientItem.add(new HTML(ingredient));
					
					unorderedList.add(ingredientItem);
				}
				item.add(ingredients);
				
				HTML description = new HTML("<p>" + nMenu.getDescription() + "</p>");
				description.setStyleName("description");
				item.add(description);
				
				HTML price = new HTML("Giá : " + nMenu.getPrice());
				price.setStyleName("price");
				item.add(price);
				
				
				SimplePanel timeline = new SimplePanel();
				timeline.setStyleName("timeline");
				UnorderedList timelineUnorderedList = new UnorderedList();
				timeline.add(timelineUnorderedList);
				List<String> listname = getListNames(contentType);
				int widthOfItem = MenuPopupContent.SLIDE_WIDTH / getColume(listname.size());
				double a = Math.ceil( listname.size() / (double)getColume(listname.size()));
				double marginTop = 45 - a * 10;
				$(timelineUnorderedList.getElement()).css("margin-top", String.valueOf(marginTop)+ "px");
				for (String tl : listname) {
					ListItems timelineItem = new ListItems();
					timelineItem.setWidth(String.valueOf(widthOfItem) + "px");
					timelineItem.add(new HTML(tl));
					if(nMenu.getNameVI().equals(tl)){
						timelineItem.setStyleName("current");
					}else{
						timelineItem.removeStyleName("current");
					}
					timelineUnorderedList.add(timelineItem);
				}
				
				item.add(timeline);
				
				listItems.add(item);
				
			} 
			return listItems;
		}
		return null;
	}
	
	private int getColume(int size){
		int colume = 6;
		while (size / colume < 2 && colume > 3) {
			colume --;
		}
		
		return colume;
	}

	public void setnMenus(List<NMenu> nMenus) {
		this.nMenus = nMenus;
	}
}
